package com.ruoyi.manage.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.manage.domain.CrApplication;

/**
 * 学生申请Service接口
 * 
 * @author ruoyi
 * @date 2024-09-24
 */
public interface ICrApplicationService 
{
    /**
     * 查询学生申请
     * 
     * @param applicationId 学生申请主键
     * @return 学生申请
     */
    public CrApplication selectCrApplicationByApplicationId(Long applicationId);

    /**
     * 查询学生申请列表
     * 
     * @param crApplication 学生申请
     * @return 学生申请集合
     */
    public List<CrApplication> selectCrApplicationList(CrApplication crApplication);

    /**
     * 新增学生申请
     * 
     * @param crApplication 学生申请
     * @return 结果
     */
    public int insertCrApplication(CrApplication crApplication);

    /**
     * 修改学生申请
     * 
     * @param crApplication 学生申请
     * @return 结果
     */
    public int updateCrApplication(CrApplication crApplication);

    /**
     * 批量删除学生申请
     * 
     * @param applicationIds 需要删除的学生申请主键集合
     * @return 结果
     */
    public int deleteCrApplicationByApplicationIds(Long[] applicationIds);

    /**
     * 删除学生申请信息
     * 
     * @param applicationId 学生申请主键
     * @return 结果
     */
    public int deleteCrApplicationByApplicationId(Long applicationId);

    /**
     * 根据学生ID查询申请列表
     * 
     * @param studentId 学生ID
     * @return 申请列表
     */
    public List<CrApplication> selectApplicationsByStudentId(Long studentId);

    /**
     * 根据社团ID查询申请列表
     * 
     * @param clubId 社团ID
     * @return 申请列表
     */
    public List<CrApplication> selectApplicationsByClubId(Long clubId);

    /**
     * 根据招聘ID查询申请列表
     * 
     * @param recruitmentId 招聘ID
     * @return 申请列表
     */
    public List<CrApplication> selectApplicationsByRecruitmentId(Long recruitmentId);

    /**
     * 根据申请状态查询申请列表
     * 
     * @param status 申请状态
     * @return 申请列表
     */
    public List<CrApplication> selectApplicationsByStatus(String status);

    /**
     * 学生申请招聘职位
     * 
     * @param studentId 学生ID
     * @param recruitmentId 招聘ID
     * @param applicationContent 申请内容
     * @return 结果
     */
    public int submitApplication(Long studentId, Long recruitmentId, String applicationContent);

    /**
     * 社团审核申请
     * 
     * @param applicationId 申请ID
     * @param status 审核状态
     * @param reviewComment 审核意见
     * @param reviewScore 审核评分
     * @return 结果
     */
    public int reviewApplication(Long applicationId, String status, String reviewComment, Integer reviewScore);

    /**
     * 批量审核申请
     * 
     * @param applicationIds 申请ID数组
     * @param status 审核状态
     * @param reviewComment 审核意见
     * @return 结果
     */
    public int batchReviewApplications(Long[] applicationIds, String status, String reviewComment);

    /**
     * 撤回申请
     * 
     * @param applicationId 申请ID
     * @param studentId 学生ID
     * @return 结果
     */
    public int withdrawApplication(Long applicationId, Long studentId);

    /**
     * 获取申请统计信息
     * 
     * @param recruitmentId 招聘ID
     * @return 统计信息
     */
    public Map<String, Object> getApplicationStatistics(Long recruitmentId);

    /**
     * 获取学生申请统计
     * 
     * @param studentId 学生ID
     * @return 统计信息
     */
    public Map<String, Object> getStudentApplicationStatistics(Long studentId);

    /**
     * 获取社团申请统计
     * 
     * @param clubId 社团ID
     * @return 统计信息
     */
    public Map<String, Object> getClubApplicationStatistics(Long clubId);

    /**
     * 检查是否重复申请
     * 
     * @param studentId 学生ID
     * @param recruitmentId 招聘ID
     * @return 是否重复申请
     */
    public boolean checkDuplicateApplication(Long studentId, Long recruitmentId);

    /**
     * 获取待审核申请数量
     * 
     * @param clubId 社团ID
     * @return 待审核申请数量
     */
    public long getPendingApplicationCount(Long clubId);

    /**
     * 导出申请数据
     * 
     * @param crApplication 查询条件
     * @return 申请列表
     */
    public List<CrApplication> exportApplications(CrApplication crApplication);
}